import openpyxl
from xlrd import open_workbook
from xlutils.copy import copy
import os
import re
from datetime import datetime, timedelta
import time
 
def 迁移数据(输出目录):
    try:
        # 创建输出目录
        os.makedirs(输出目录, exist_ok=True)
        
        # 加载源数据
        源工作簿 = openpyxl.load_workbook('批量生成合同内容.xlsx', data_only=True)
        源工作表 = 源工作簿['数据内容']
        
        # 按目标A列内容分组数据
        分组数据 = {}
        for 索引, 行数据 in enumerate(源工作表.iter_rows(min_row=2), 2):
            if not 行数据[0].value:
                continue
            
            分组键 = str(行数据[0].value)
            安全文件名 = re.sub(r'[\\/*?:"<>|]', "_", 分组键)
            
            if 安全文件名 not in 分组数据:
                分组数据[安全文件名] = []
            分组数据[安全文件名].append(行数据)
        
        # 列映射
        列映射 = {'B': 'C', 'D': 'D', 'G': 'M', 'I': 'N', 
                'Y': 'O', 'J': 'P', 'R': 'R', 'U': 'S', 'A': 'T'}
        列索引映射 = {openpyxl.utils.column_index_from_string(源列)-1: ord(目标列)-ord('A') 
                 for 源列, 目标列 in 列映射.items()}
        
        # 固定值映射
        固定值 = {0: "1",4: "13", 5: "0", 6: "0", 8: "888888", 12: "1", 16: "1", 21: "0", 22: "0"}
        
        # 处理每个分组
        for 分组键, 行列表 in 分组数据.items():
            目标工作簿 = copy(open_workbook('./模板/销售合同快速导入模板.xls', formatting_info=True))
            目标工作表 = 目标工作簿.get_sheet(0)
            
            for 序号, 行数据 in enumerate(行列表, 1):
                # 写入序号
                目标工作表.write(序号, 1, 序号)
                
                # 写入固定值
                for 列索引, 值 in 固定值.items():
                    目标工作表.write(序号, 列索引, 值)
                
                # 处理U列数据（分割源A列内容并加1天）
                源A值 = str(行数据[0].value)
                分割结果 = 源A值.split('-')
                U列值 = ''
                if len(分割结果) >= 4:
                    日期字符串 = "/".join(分割结果[1:4])
                    try:
                        日期对象 = datetime.strptime(日期字符串, '%Y/%m/%d')
                        U列值 = (日期对象 + timedelta(days=1)).strftime('%Y/%m/%d')
                    except ValueError:
                        print(f"日期格式错误: {日期字符串}")
                目标工作表.write(序号, 20, U列值)
                
                # 处理L列数据（根据源E列内容）
                源E值 = 行数据[4].value if len(行数据) > 4 and 行数据[4].value else ""
                L列值 = '柳钢' if 源E值 == '柳钢本部' else '广钢' if 源E值 == '柳钢防城港' else ''
                目标工作表.write(序号, 11, L列值)
                
                # 处理列映射
                for 源索引, 目标索引 in 列索引映射.items():
                    if 源索引 < len(行数据) and 行数据[源索引].value is not None:
                        单元格值 = 行数据[源索引].value
                        if isinstance(单元格值, datetime):
                            # 格式化日期为 'YYYY/MM/DD'
                            单元格值 = 单元格值.strftime('%Y/%m/%d')
                        目标工作表.write(序号, 目标索引, str(单元格值))
            
            # 保存文件
            输出文件名 = f'{输出目录}/销售合同快速导入_{分组键}.xls'
            目标工作簿.save(输出文件名)
            print(f"已生成文件: {输出文件名}")
        
        源工作簿.close()
        print("处理完成!")
        
    except Exception as e:
        print(f"发生错误: {e}")
        import traceback
        traceback.print_exc()
 
if __name__ == '__main__':
    输出目录="./output_files"
    os.makedirs(输出目录, exist_ok=True)
    #[os.remove(os.path.join(输出目录, f)) for f in os.listdir(输出目录) if os.path.isfile(os.path.join(输出目录, f))]
    print(f"输出目录已清空：{输出目录}")
    迁移数据(输出目录)
    
    print("3秒后自动关闭....")
    time.sleep(1)
    print("2秒后自动关闭....")
    time.sleep(1)
    print("1秒后自动关闭....")
    time.sleep(1)
